package com.ytf.test.tenth;

interface Game {
    boolean move();
}

interface GameFactory {
    Game getGame();
}

class CheckersFactory implements Game {

    private CheckersFactory() {

    }

    private int mobes = 0;
    private static final int MOVES = 3;

    @Override
    public boolean move() {
        System.out.println("Checkers move " + mobes);
        return ++mobes != MOVES;
    }
    public static GameFactory gameFactory = new GameFactory() {
        @Override
        public Game getGame() {
            return new CheckersFactory();
        }
    };
}

class ChessFactory implements Game {

    private ChessFactory() {
    }

    private int mobes = 0;
    private static final int MOVES = 4;

    @Override
    public boolean move() {
        System.out.println("Chess move " + mobes);
        return ++mobes != MOVES;
    }
    public static GameFactory gameFactory = new GameFactory() {
        @Override
        public Game getGame() {
            return new ChessFactory();
        }
    };
}

/**
 * @author: YTF
 * @date: 2025/2/2 17:23
 * @version: 1.0
 * @description:
 */
public class Games {
    public static void playGame(GameFactory gameFactory){
        Game game = gameFactory.getGame();
        while (game.move()){

        }
    }
    public static void main(String[] args) {
        playGame(CheckersFactory.gameFactory);
        playGame(ChessFactory.gameFactory);
        /**
         * OutPut:
         * Checkers move 0
         * Checkers move 1
         * Checkers move 2
         * Chess move 0
         * Chess move 1
         * Chess move 2
         * Chess move 3
         */
    }
}
